RMI Callback Mechanism

Java Technologies - জাভা আরএমআই (Java RMI)
158
158

RMI Callback Mechanism হলো এমন একটি প্রক্রিয়া যেখানে একটি সার্ভার ক্লায়েন্টের অনুরোধে একটি নির্দিষ্ট ইভেন্ট বা তথ্য সরবরাহ করার জন্য ক্লায়েন্টে একটি মেথড কল করে। এটি bidirectional communication সক্ষম করে, যেখানে ক্লায়েন্ট এবং সার্ভার উভয়ই একে অপরকে মেথড কল করতে পারে।

RMI Callback ব্যবহৃত হয় এমন ক্ষেত্রে যেখানে ক্লায়েন্ট সার্ভারের কাছ থেকে রিয়েল-টাইম ইভেন্টের নোটিফিকেশন চায়।


RMI Callback এর কাজের ধাপসমূহ

  1. Callback Interface:
    • ক্লায়েন্টে মেথড ডিফাইন করতে একটি রিমোট ইন্টারফেস তৈরি করা হয়।
  2. Callback Implementation:
    • ক্লায়েন্টের পাশে রিমোট ইন্টারফেস ইমপ্লিমেন্ট করা হয়।
  3. Callback Registration:
    • ক্লায়েন্ট নিজেকে সার্ভারে রেজিস্টার করে, যাতে সার্ভার ক্লায়েন্টের মেথড কল করতে পারে।
  4. Server Triggers Callback:
    • সার্ভার নির্দিষ্ট পরিস্থিতিতে ক্লায়েন্টের রেজিস্টার করা মেথড কল করে।

RMI Callback এর উদাহরণ

1. Callback Interface তৈরি করা (Client Side)

import java.rmi.Remote;
import java.rmi.RemoteException;

// Remote Interface for Callback
public interface CallbackClient extends Remote {
    void notifyEvent(String message) throws RemoteException;
}

2. Callback Interface ইমপ্লিমেন্ট করা (Client Side)

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

// Client-Side Callback Implementation
public class CallbackClientImpl extends UnicastRemoteObject implements CallbackClient {
    public CallbackClientImpl() throws RemoteException {
        super();
    }

    @Override
    public void notifyEvent(String message) throws RemoteException {
        System.out.println("Notification from Server: " + message);
    }
}

3. Server-Side Interface তৈরি করা

import java.rmi.Remote;
import java.rmi.RemoteException;

// Remote Interface for Server
public interface Server extends Remote {
    void registerCallback(CallbackClient client) throws RemoteException;
    void triggerEvent() throws RemoteException;
}

4. Server-Side Implementation

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

// Server Implementation
public class ServerImpl extends UnicastRemoteObject implements Server {
    private List<CallbackClient> clients;

    public ServerImpl() throws RemoteException {
        super();
        clients = new ArrayList<>();
    }

    @Override
    public void registerCallback(CallbackClient client) throws RemoteException {
        clients.add(client);
        System.out.println("Client registered for callback.");
    }

    @Override
    public void triggerEvent() throws RemoteException {
        for (CallbackClient client : clients) {
            client.notifyEvent("This is a callback message from the server.");
        }
    }
}

5. Server Application

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class ServerApp {
    public static void main(String[] args) {
        try {
            // Create and export the server object
            ServerImpl server = new ServerImpl();

            // Start RMI Registry
            Registry registry = LocateRegistry.createRegistry(1099);

            // Bind the server object to the RMI Registry
            registry.bind("Server", server);

            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

6. Client Application

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class ClientApp {
    public static void main(String[] args) {
        try {
            // Locate the RMI Registry
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);

            // Lookup the server object
            Server server = (Server) registry.lookup("Server");

            // Create a callback client
            CallbackClientImpl client = new CallbackClientImpl();

            // Register the client for callback
            server.registerCallback(client);

            // Trigger an event from the server
            server.triggerEvent();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

কোড কম্পাইল এবং চালানোর ধাপ

  1. কম্পাইল করা:

    javac *.java
    
  2. RMI Registry চালানো:

    rmiregistry 1099
    
  3. Server চালানো:

    java ServerApp
    
  4. Client চালানো:

    java ClientApp
    

RMI Callback এর সুবিধা

  1. Bidirectional Communication:
    • ক্লায়েন্ট এবং সার্ভার উভয়ের মধ্যে রিয়েল-টাইম যোগাযোগ সম্ভব হয়।
  2. Event Notification:
    • ক্লায়েন্টকে নির্দিষ্ট ইভেন্টের নোটিফিকেশন প্রেরণ করা যায়।
  3. Dynamic Client Registration:
    • একাধিক ক্লায়েন্টকে রেজিস্টার এবং পরিচালনা করা যায়।

RMI Callback এর সীমাবদ্ধতা

  1. Security Concerns:
    • ক্লায়েন্ট এবং সার্ভার উভয়কেই যথাযথভাবে যাচাই করতে হয়।
  2. Network Latency:
    • কলব্যাক প্রক্রিয়া নেটওয়ার্কের বিলম্বের উপর নির্ভরশীল।
  3. Exception Handling:
    • ক্লায়েন্ট বা সার্ভার উপলব্ধ না থাকলে RemoteException পরিচালনা করতে হয়।

RMI Callback Mechanism ক্লায়েন্ট-সার্ভার যোগাযোগের একটি কার্যকর উপায়, যা সার্ভার থেকে ক্লায়েন্টে ইভেন্টের তথ্য প্রেরণ করতে সক্ষম করে। উদাহরণটি দেখায় কীভাবে একটি Callback মডেল তৈরি এবং পরিচালনা করা যায়, যা জটিল Distributed Systems ডিজাইন করার ক্ষেত্রে গুরুত্বপূর্ণ।

Content added By

RMI Callback কি এবং এর ব্যবহার

105
105

RMI Callback হল এমন একটি প্রক্রিয়া যেখানে RMI সার্ভার রিমোট ক্লায়েন্টকে তার মেথড কলব্যাক করে। অর্থাৎ, ক্লায়েন্ট শুধুমাত্র সার্ভারকে মেথড কল করে না, বরং সার্ভারও প্রয়োজন অনুসারে ক্লায়েন্টের মেথড কল করতে পারে। এটি Bi-Directional Communication নিশ্চিত করে।

RMI Callback মূলত Event-Driven Architecture এবং Client Notification এর জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, চ্যাট সিস্টেম, স্টক আপডেট, বা রিয়েল-টাইম নোটিফিকেশন সিস্টেমে এটি ব্যবহার করা হয়।


RMI Callback এর প্রধান কার্যপ্রণালী

  1. Client-Side Remote Interface:
    ক্লায়েন্ট একটি Remote Interface তৈরি করে যাতে সার্ভার প্রয়োজনীয় সময়ে মেথড কল করতে পারে।
  2. Server-Side Callback Logic:
    সার্ভার ক্লায়েন্টের Remote Interface এর ইমপ্লিমেন্টেশন গ্রহণ করে এবং প্রয়োজন অনুযায়ী ক্লায়েন্টের মেথড কল করে।

RMI Callback বাস্তবায়নের ধাপ

ধাপ ১: Client-Side Remote Interface তৈরি করা

import java.rmi.Remote;
import java.rmi.RemoteException;

// Client Remote Interface
public interface ClientCallback extends Remote {
    void notifyClient(String message) throws RemoteException;
}

ধাপ ২: Server-Side Remote Interface তৈরি করা

import java.rmi.Remote;
import java.rmi.RemoteException;

// Server Remote Interface
public interface Server extends Remote {
    void registerClient(ClientCallback client) throws RemoteException;
    void broadcastMessage(String message) throws RemoteException;
}

ধাপ ৩: Client-Side Remote Interface ইমপ্লিমেন্ট করা

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

// Client Callback Implementation
public class ClientCallbackImpl extends UnicastRemoteObject implements ClientCallback {

    protected ClientCallbackImpl() throws RemoteException {
        super();
    }

    @Override
    public void notifyClient(String message) throws RemoteException {
        System.out.println("Notification from Server: " + message);
    }
}

ধাপ ৪: Server-Side Remote Interface ইমপ্লিমেন্ট করা

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;

// Server Implementation
public class ServerImpl extends UnicastRemoteObject implements Server {
    private final List<ClientCallback> clients;

    protected ServerImpl() throws RemoteException {
        super();
        clients = new ArrayList<>();
    }

    @Override
    public void registerClient(ClientCallback client) throws RemoteException {
        clients.add(client);
        System.out.println("Client registered successfully!");
    }

    @Override
    public void broadcastMessage(String message) throws RemoteException {
        for (ClientCallback client : clients) {
            client.notifyClient(message); // Call client callback method
        }
    }
}

ধাপ ৫: Server Application তৈরি করা

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class ServerApp {
    public static void main(String[] args) {
        try {
            LocateRegistry.createRegistry(1099); // RMI Registry শুরু করা
            ServerImpl server = new ServerImpl();
            Naming.rebind("rmi://localhost:1099/ServerService", server);
            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ধাপ ৬: Client Application তৈরি করা

import java.rmi.Naming;

public class ClientApp {
    public static void main(String[] args) {
        try {
            // Create and register client callback
            ClientCallback clientCallback = new ClientCallbackImpl();

            // Look up the server object
            Server server = (Server) Naming.lookup("rmi://localhost:1099/ServerService");

            // Register the client with the server
            server.registerClient(clientCallback);

            // Broadcast a message
            server.broadcastMessage("Hello, Clients!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Callback এর ব্যবহার

  1. Real-Time Notifications:
    • যেমন: চ্যাট অ্যাপ্লিকেশন বা স্টক মার্কেট আপডেট যেখানে সার্ভার বিভিন্ন ক্লায়েন্টকে রিয়েল-টাইম মেসেজ পাঠায়।
  2. Event Handling:
    • সার্ভার যখন কোনো গুরুত্বপূর্ণ ইভেন্ট সনাক্ত করে, তখন এটি সংশ্লিষ্ট ক্লায়েন্টকে অবহিত করতে পারে।
  3. Distributed Systems Monitoring:
    • ক্লায়েন্ট সার্ভারের কাছে ডেটা মনিটরিং রিকোয়েস্ট পাঠায়, এবং সার্ভার ফলাফল ক্লায়েন্টে পাঠায়।

RMI Callback ব্যবহারের সময় কিছু চ্যালেঞ্জ

  1. Network Latency:
    • Callback এর সময় নেটওয়ার্ক ডিলে হতে পারে।
  2. Security:
    • ক্লায়েন্ট-সার্ভার যোগাযোগ সুরক্ষিত করতে SSL/TLS ব্যবহার করা গুরুত্বপূর্ণ।
  3. Concurrency:
    • একাধিক ক্লায়েন্টের callback হ্যান্ডেল করার সময় সঠিক synchronization নিশ্চিত করতে হবে।
  4. Client Availability:
    • ক্লায়েন্ট অফলাইনে থাকলে callback কাজ করবে না, যা Fault Tolerance প্রয়োজন করে।

RMI Callback জাভা RMI প্রযুক্তির একটি শক্তিশালী ফিচার যা ক্লায়েন্ট এবং সার্ভারের মধ্যে Two-Way Communication সম্ভব করে। এটি বাস্তবায়নের মাধ্যমে ইভেন্ট-ড্রিভেন আর্কিটেকচার, রিয়েল-টাইম নোটিফিকেশন সিস্টেম, এবং অন্যান্য ইন্টারঅ্যাক্টিভ অ্যাপ্লিকেশন তৈরি করা যায়। সঠিকভাবে পরিকল্পনা এবং বাস্তবায়নের মাধ্যমে RMI Callback একটি কার্যকর টুল হতে পারে।

Content added By

Client-Side থেকে Server-Side Method Call করা

116
116

Java RMI (Remote Method Invocation) এর মাধ্যমে ক্লায়েন্ট অ্যাপ্লিকেশন সার্ভার সাইডে থাকা রিমোট মেথড কল করতে পারে। এটি একটি ডিস্ট্রিবিউটেড আর্কিটেকচার তৈরি করে যেখানে রিমোট অবজেক্ট মেথড ইন্টারঅ্যাকশন সম্ভব হয়।


Client-Side থেকে Server-Side Method Call করার ধাপসমূহ

Step 1: Remote Interface তৈরি করা

Remote মেথডের সংজ্ঞা Remote Interface-এ থাকে। এটি অবশ্যই java.rmi.Remote ইন্টারফেসটি এক্সটেন্ড করতে হবে এবং প্রতিটি মেথডে RemoteException থ্রো করতে হবে।

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRemoteService extends Remote {
    String sayHello(String name) throws RemoteException;
}

Step 2: Remote Object বাস্তবায়ন করা

Remote Object হলো Remote Interface এর ইমপ্লিমেন্টেশন। এটি UnicastRemoteObject এক্সটেন্ড করে এবং রিমোট মেথডগুলোর লজিক সরবরাহ করে।

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

public class MyRemoteServiceImpl extends UnicastRemoteObject implements MyRemoteService {
    public MyRemoteServiceImpl() throws RemoteException {
        super();
    }

    @Override
    public String sayHello(String name) throws RemoteException {
        return "Hello, " + name + "! Welcome to RMI.";
    }
}

Step 3: RMI Server তৈরি করা

RMI Server Remote Object তৈরি করে এবং এটি RMI Registry তে নিবন্ধন করে।

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIServer {
    public static void main(String[] args) {
        try {
            // Remote Object তৈরি করা
            MyRemoteServiceImpl service = new MyRemoteServiceImpl();
            
            // RMI Registry তৈরি করা
            Registry registry = LocateRegistry.createRegistry(1099);
            
            // Remote Object কে RMI Registry তে bind করা
            registry.bind("MyService", service);

            System.out.println("RMI Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Step 4: RMI Client তৈরি করা

RMI Client RMI Registry থেকে রিমোট অবজেক্ট খুঁজে পায় এবং রিমোট মেথড কল করে।

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // RMI Registry থেকে রিমোট অবজেক্ট খোঁজা
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);
            MyRemoteService service = (MyRemoteService) registry.lookup("MyService");

            // রিমোট মেথড কল করা
            String response = service.sayHello("Alice");
            System.out.println("Server Response: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Client-Side থেকে Server-Side Method Call এর ব্যাখ্যা

  1. Registry.lookup():
    ক্লায়েন্ট lookup() মেথড ব্যবহার করে রিমোট অবজেক্ট খুঁজে পায়। এটি RMI Registry থেকে নির্দিষ্ট নামের রিমোট অবজেক্ট রিটার্ন করে।
  2. Remote Method Invocation:
    ক্লায়েন্ট রিমোট অবজেক্টে মেথড কল করলে, RMI Stub রিমোট মেথড কলকে সিরিয়ালাইজ করে এবং সার্ভারে প্রেরণ করে।
  3. Execution on Server:
    সার্ভার প্রাপ্ত ডেটা ডেসিরিয়ালাইজ করে মেথড এক্সিকিউট করে এবং ফলাফল ক্লায়েন্টে ফেরত পাঠায়।

Client-Side এবং Server-Side এর মধ্যে যোগাযোগের প্রক্রিয়া

  1. Stub এবং Skeleton:
    • Stub: ক্লায়েন্ট সাইডে রিমোট অবজেক্টের প্রতিনিধিত্ব করে।
    • Skeleton: সার্ভার সাইডে রিমোট অবজেক্টের প্রতিনিধিত্ব করে (Java 2-এর পর Skeleton আর ব্যবহৃত হয় না)।
  2. Serialization and Deserialization:
    • মেথড প্যারামিটার এবং রিটার্ন ভ্যালু serializedeserialize হয়।
  3. Transport Layer:
    • RMI এর মাধ্যমে মেথড কলের ডেটা TCP/IP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রেরণ করা হয়।

উদাহরণ অনুযায়ী Output:

RMI Server is running...
Server Response: Hello, Alice! Welcome to RMI.

প্রয়োজনীয় বিষয়সমূহ

  1. RMI Registry:
    RMI Registry চালু করতে হবে।

    rmiregistry
    
  2. Security Manager:
    RMI অ্যাপ্লিকেশনে নিরাপত্তা নিশ্চিত করতে Security Manager ব্যবহার করা যেতে পারে।
  3. Policy File:
    যদি Security Manager ব্যবহার করা হয়, তবে একটি policy file প্রদান করতে হবে।
  4. Firewall Configuration:
    RMI ব্যবহারের জন্য নেটওয়ার্ক পোর্ট খুলে রাখতে হবে।

Java RMI ব্যবহার করে ক্লায়েন্ট অ্যাপ্লিকেশন সহজেই রিমোট সার্ভারে মেথড কল করতে পারে। RMI যোগাযোগের মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেম তৈরির জন্য এটি একটি শক্তিশালী টুল। Stub, RMI Registry, এবং Serialization এর মতো উপাদানগুলি সঠিকভাবে কনফিগার করে এই প্রক্রিয়া সফলভাবে সম্পন্ন করা যায়।

Content added By

RMI Callback এর মাধ্যমে Two-Way Communication

110
110

Java RMI সাধারণত ক্লায়েন্ট-টু-সার্ভার যোগাযোগে ব্যবহৃত হয়। তবে RMI Callback পদ্ধতি ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকের (two-way) যোগাযোগ নিশ্চিত করা যায়। এই পদ্ধতিতে, ক্লায়েন্ট একটি Remote Object সার্ভারের কাছে নিবন্ধিত করে এবং সার্ভার প্রয়োজন অনুযায়ী ক্লায়েন্টকে কলব্যাক করে।


RMI Callback কী?

RMI Callback এমন একটি প্রক্রিয়া যেখানে:

  1. Client তার Remote Object সার্ভারের কাছে রেজিস্টার করে।
  2. Server সেই Remote Object ব্যবহার করে ক্লায়েন্টকে মেথড কল করে।

এই পদ্ধতি Two-Way Communication বা Bidirectional Communication এর জন্য ব্যবহৃত হয়।


RMI Callback এর প্রক্রিয়া

1. Remote Interface তৈরি করা (Callback Interface)

একটি Remote Interface তৈরি করা হয় যা সার্ভার ক্লায়েন্টের Remote Object এ কল করার জন্য ব্যবহার করবে।

import java.rmi.Remote;
import java.rmi.RemoteException;

// Callback Interface
public interface CallbackClientInterface extends Remote {
    void notifyClient(String message) throws RemoteException;
}

2. Remote Interface তৈরি করা (Server Service Interface)

এটি সার্ভিসের জন্য ব্যবহৃত হবে, যেখানে ক্লায়েন্ট নিজের Remote Object রেজিস্টার করবে।

import java.rmi.Remote;
import java.rmi.RemoteException;

// Server Service Interface
public interface ServerServiceInterface extends Remote {
    void registerClient(CallbackClientInterface client) throws RemoteException;
    void sendMessage(String message) throws RemoteException;
}

3. সার্ভার ইমপ্লিমেন্টেশন (Server Implementation)

সার্ভার ক্লায়েন্টদের রেজিস্টার করে এবং তাদের Callback মেথড কল করে।

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

// Server Implementation
public class ServerServiceImpl extends UnicastRemoteObject implements ServerServiceInterface {
    private final List<CallbackClientInterface> clients;

    public ServerServiceImpl() throws RemoteException {
        super();
        clients = new ArrayList<>();
    }

    @Override
    public void registerClient(CallbackClientInterface client) throws RemoteException {
        clients.add(client);
        System.out.println("Client registered.");
    }

    @Override
    public void sendMessage(String message) throws RemoteException {
        System.out.println("Sending message to clients...");
        for (CallbackClientInterface client : clients) {
            client.notifyClient(message);
        }
    }
}

4. ক্লায়েন্ট ইমপ্লিমেন্টেশন (Client Implementation)

ক্লায়েন্ট নিজের Remote Object ইমপ্লিমেন্ট করে এবং সার্ভারে রেজিস্টার করে।

Callback Client Implementation:

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

// Client Callback Implementation
public class CallbackClientImpl extends UnicastRemoteObject implements CallbackClientInterface {
    public CallbackClientImpl() throws RemoteException {
        super();
    }

    @Override
    public void notifyClient(String message) throws RemoteException {
        System.out.println("Message from Server: " + message);
    }
}

Client Main Class:

import java.rmi.Naming;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // RMI Registry থেকে Server Object খুঁজে বের করা
            ServerServiceInterface server = (ServerServiceInterface) Naming.lookup("rmi://localhost:1099/ServerService");

            // Callback Object তৈরি এবং রেজিস্ট্রেশন
            CallbackClientInterface client = new CallbackClientImpl();
            server.registerClient(client);

            // সার্ভারে মেসেজ পাঠানোর অনুরোধ
            server.sendMessage("Hello from Client!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. সার্ভার মেইন ক্লাস (Server Main Class)

RMI Registry-তে সার্ভার অবজেক্ট রেজিস্টার করা হয়।

import java.rmi.Naming;

public class RMIServer {
    public static void main(String[] args) {
        try {
            // Server Implementation তৈরি এবং RMI Registry-তে রেজিস্ট্রেশন
            ServerServiceInterface server = new ServerServiceImpl();
            Naming.rebind("rmi://localhost:1099/ServerService", server);

            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Callback এর সুবিধা

  1. Two-Way Communication:
    এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকের যোগাযোগ সহজ করে।
  2. Real-Time Notifications:
    সার্ভার ক্লায়েন্টকে তাৎক্ষণিক তথ্য প্রদান করতে পারে।
  3. Flexibility:
    একাধিক ক্লায়েন্টকে রেজিস্টার করা যায় এবং সার্ভার তাদের আলাদাভাবে মেসেজ পাঠাতে পারে।

RMI Callback ব্যবহারের ক্ষেত্রে চ্যালেঞ্জ

  1. Security Concerns:
    Callback এর সময় সঠিক Security Manager ব্যবহার না করলে ক্লায়েন্ট ঝুঁকিতে থাকতে পারে।
  2. Performance Overhead:
    একাধিক ক্লায়েন্ট থাকলে মেসেজ ডেলিভারির সময় পারফরম্যান্স হ্রাস পেতে পারে।
  3. Firewall Issues:
    ক্লায়েন্ট-টু-সার্ভার কমিউনিকেশন ফায়ারওয়াল দ্বারা প্রভাবিত হতে পারে।

Java RMI Callback একটি শক্তিশালী পদ্ধতি যা RMI-তে Two-Way Communication এর জন্য ব্যবহৃত হয়। এটি রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট সিস্টেম, ইভেন্ট নোটিফিকেশন ইত্যাদিতে অত্যন্ত কার্যকর। সঠিক কনফিগারেশন এবং নিরাপত্তার মাধ্যমে RMI Callback পদ্ধতি ব্যবহার করা নিরাপদ ও কার্যকর।

Content added By

উদাহরণ সহ RMI Callback বাস্তবায়ন

96
96

RMI Callback এমন একটি পদ্ধতি, যেখানে সার্ভার একটি ক্লায়েন্টে ফিরে কল করতে পারে। এটি সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ক্লায়েন্ট কোনো কাজ শুরু করে এবং সার্ভার সেই কাজের ফলাফল ক্লায়েন্টকে জানায়। RMI Callback সিস্টেমে ক্লায়েন্টকে Remote Object হিসেবে নিবন্ধন করতে হয় যাতে সার্ভার সেটিকে কল করতে পারে।


RMI Callback এর কাজের প্রক্রিয়া

  1. Callback Interface:
    • ক্লায়েন্ট-সাইডে রিমোট ইন্টারফেস তৈরি করা হয়, যা সার্ভার কলব্যাকের জন্য ব্যবহার করে।
  2. Callback Implementation:
    • ক্লায়েন্ট এই রিমোট ইন্টারফেস ইমপ্লিমেন্ট করে এবং সার্ভারে রেজিস্টার করে।
  3. Callback Registration:
    • ক্লায়েন্ট কলব্যাক অবজেক্ট সার্ভারে নিবন্ধন করে।
  4. Server Initiated Callback:
    • সার্ভার ক্লায়েন্টের রিমোট মেথড কল করে।

RMI Callback বাস্তবায়ন উদাহরণ

Step 1: Callback Interface তৈরি

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Callback extends Remote {
    void notifyClient(String message) throws RemoteException;
}

Step 2: Server Interface তৈরি

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Server extends Remote {
    void registerCallback(Callback clientCallback) throws RemoteException;
    void performTask() throws RemoteException;
}

Step 3: Server Implementation

import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;

public class ServerImpl extends UnicastRemoteObject implements Server {
    private final List<Callback> clients;

    protected ServerImpl() throws RemoteException {
        super();
        clients = new ArrayList<>();
    }

    @Override
    public void registerCallback(Callback clientCallback) throws RemoteException {
        clients.add(clientCallback);
        System.out.println("Client registered for callback.");
    }

    @Override
    public void performTask() throws RemoteException {
        System.out.println("Performing task on the server...");
        
        // Task complete, notify clients
        for (Callback client : clients) {
            client.notifyClient("Task completed successfully!");
        }
    }
}

Step 4: Callback Implementation (Client-Side)

import java.rmi.server.UnicastRemoteObject;

public class ClientCallbackImpl extends UnicastRemoteObject implements Callback {
    protected ClientCallbackImpl() throws RemoteException {
        super();
    }

    @Override
    public void notifyClient(String message) throws RemoteException {
        System.out.println("Callback received from server: " + message);
    }
}

Step 5: Server Main Class

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class ServerMain {
    public static void main(String[] args) {
        try {
            LocateRegistry.createRegistry(1099);
            ServerImpl server = new ServerImpl();
            Naming.rebind("rmi://localhost:1099/Server", server);
            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Step 6: Client Main Class

import java.rmi.Naming;

public class ClientMain {
    public static void main(String[] args) {
        try {
            // Locate the server
            Server server = (Server) Naming.lookup("rmi://localhost:1099/Server");

            // Create and register client callback
            Callback clientCallback = new ClientCallbackImpl();
            server.registerCallback(clientCallback);

            // Perform task on the server
            server.performTask();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Callback কাজের ধাপ

  1. Server Object তৈরি করুন:
    • সার্ভার ServerImpl অবজেক্ট তৈরি করবে এবং RMI Registry-তে নিবন্ধন করবে।
  2. Client Callback Register করুন:
    • ক্লায়েন্ট registerCallback() মেথড কল করে সার্ভারে নিজের কলব্যাক রেজিস্টার করবে।
  3. Server থেকে Callback Initiate করুন:
    • সার্ভার notifyClient() মেথড ব্যবহার করে ক্লায়েন্টে কলব্যাক পাঠাবে।
  4. Callback Message রিসিভ করুন:
    • ক্লায়েন্ট কলব্যাক রেসপন্স প্রিন্ট করবে।

উদাহরণের আউটপুট

Server Console

Server is running...
Client registered for callback.
Performing task on the server...

Client Console

Callback received from server: Task completed successfully!

Callback বাস্তবায়নের সুবিধা

  1. Bidirectional Communication:
    • ক্লায়েন্ট-সার্ভারের মধ্যে দুই-দিকের যোগাযোগ সম্ভব হয়।
  2. Event-Driven Architecture:
    • সার্ভার ক্লায়েন্টকে ইভেন্ট সম্পন্ন হলে অবহিত করতে পারে।
  3. ডাইনামিক নোটিফিকেশন:
    • একাধিক ক্লায়েন্টকে একইসাথে নোটিফিকেশন পাঠানো যায়।

RMI Callback একটি শক্তিশালী কৌশল, যা ডিস্ট্রিবিউটেড সিস্টেমে দ্বিমুখী যোগাযোগের সুবিধা প্রদান করে। এই পদ্ধতির মাধ্যমে ক্লায়েন্ট এবং সার্ভার তাদের নিজ নিজ কাজ পরিচালনা করতে পারে এবং সার্ভারের ফলাফল ক্লায়েন্টে প্রেরণ করতে পারে।

Content added By
Promotion